package com.ruoyi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.ProjectStageAddDTO;
import com.ruoyi.system.dto.ConstructionProjectStageDTO;
import com.ruoyi.system.entity.ConstructionProjectDO;
import com.ruoyi.system.entity.ConstructionProjectStageRelDO;

import java.util.List;

/**
 * 项目阶段管理Service接口
 */
public interface IProjectStageService extends IService<ConstructionProjectStageRelDO> {

    /**
     * 根据项目ID获取所有阶段
     * @param projectId 项目ID
     * @return 阶段列表
     */
    List<ConstructionProjectStageDTO> getStagesByProjectId(Long projectId);

    /**
     * 新增项目阶段
     * @param stageAddDTO 新增阶段DTO
     * @return 是否新增成功
     */
    boolean addStage(ProjectStageAddDTO stageAddDTO);

    /**
     * 删除项目阶段
     * @param projectId 项目ID
     * @param stageId 阶段ID
     * @return 是否删除成功
     */
    boolean deleteStage(Long projectId, Long stageId);

    /**
     * 绑定团队到阶段
     * @param stageId 阶段ID
     * @param teamId 团队ID
     * @param leaderId 负责人ID
     * @param leaderPhone 负责人电话
     * @return 是否绑定成功
     */
    boolean bindTeamToStage(Long stageId, Long teamId, Long leaderId, String leaderPhone);

    /**
     * 切换阶段状态
     * @param projectId 项目ID
     * @param stageId 阶段ID
     * @param status 状态：0-未开始，1-进行中，2-已完成
     * @return 是否切换成功
     */
    boolean changeStageStatus(Long projectId, Long stageId, Integer status);

    /**
     * 获取当前进行中的阶段
     * @param projectId 项目ID
     * @return 当前阶段信息
     */
    ConstructionProjectStageDTO getCurrentStage(Long projectId);

    /**
     * 根据阶段id查询关联项目
     */
    List<ConstructionProjectDO> getProjectsByStageId(Long stageId);

    /**
     * 根据阶段id查询未关联项目
     */
    List<ConstructionProjectDO> getUnlinkedProjectsByStageId(Long stageId);
}